File manager - Edit - /home/autoph/public_html/projects/ahg-prf-api/app/Models/PurchaseRequest.php
Back
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use OwenIt\Auditing\Contracts\Auditable; use OwenIt\Auditing\Auditable as AuditableTrait; use DB; class PurchaseRequest extends Model implements Auditable { // use HasFactory, SoftDeletes, AuditableTrait; use HasFactory, AuditableTrait; protected $table = "purchase_requests"; /** * The attributes that are NOT mass assignable. * */ protected $guarded = [ 'deleted_at', ]; protected $appends = [ 'status_name', 'next_statuses', 'approving_head_name', 'company_name', 'dealership_name', 'department_name', 'requested_by_name', // 'next_approver', ]; /** * The attributes that should be cast. * * @var array<string, string> */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', 'needed_at' => 'datetime', ]; public function current_status() { return $this->hasOne( Status::class, 'id', 'status' ); } public function company() { return $this->hasOne( Company::class, 'id', 'company_id' ); } public function dealership() { return $this->hasOne( Dealership::class, 'id', 'dealership_id' ); } public function department() { return $this->hasOne( Department::class, 'id', 'department_id' ); } public function category() { return $this->hasOne( ExpenseCategory::class, 'id', 'expense_category_id' ); } public function classification() { return $this->hasOne( ItemClassification::class, 'id', 'item_classification_id' ); } public function remarks_history() { return $this->hasMany(Remarks::class, 'prf_id', 'id') // Directly link to prf_id ->where('transaction', 'Purchase Request Item') ->with('user') ->select('remarks.*') ->whereIn('remarks.id', function ($query) { $query->select(DB::raw('MAX(id)')) ->from('remarks') ->where('transaction', 'Purchase Request Item') ->groupBy('created_at'); }) ->orderByDesc('created_at'); } public function sla_logs() { return $this->hasMany(SlaLog::class, 'prf_id', 'id') ->where('transaction', "Purchase Request Item") ->select( 'prf_id', DB::raw('MAX(transaction_id) as transaction_id'), DB::raw('MAX(transaction) as transaction'), DB::raw('MAX(user_id) as user_id'), DB::raw('MAX(start) as start'), DB::raw('MAX(end) as end'), DB::raw('MAX(created_at) as created_at'), 'status_id', DB::raw('MAX(id) as id') ) ->groupBy('status_id','prf_id') ->orderByDesc('created_at'); } public function assetItems() { return $this->belongsToMany( AssetItem::class, PurchaseRequestDtl::class, 'request_header_id', 'asset_item_id', )->withPivot([ // 'id as purchase_request_dtls_id', no elias here 'id', 'reference_no', 'uom', 'quantity']) ->wherePivot('cancelled','!=',1) ->select(DB::raw('asset_items.id as asset_item_id'), DB::raw('asset_items.name as asset_item_name'), ); } public function getNextStatusesAttribute() { $data = Status::with(['sub_process'])->select("status.*","status_process_dtls.action",DB::raw("sub_processes.code AS sub_process_code"),DB::raw("sub_processes.name AS sub_process_name")) ->distinct("purchase_requests.id") ->join("status_process_dtls", "status_process_dtls.next_status","=","status.id") ->join("status_process", "status_process_dtls.status_process_id", "=", "status_process.id") ->join("status_process_settings", "status_process.id", "=", "status_process_settings.status_process_id") ->leftJoin("sub_processes", "status_process_dtls.sub_process_id", "=", "sub_processes.id") ->where("status_process_settings.expense_category_id", "=", $this->expense_category_id) ->where("status_process_dtls.status_id", "=", $this->status) ->get(); return $data; } public function getStatusNameAttribute() { $data = Status::select("name") ->where("id", "=", $this->status) ->first(); if($data) return $data->name; return null; } public function getApprovingHeadNameAttribute() { $data = User::select("name") ->where("employee_id", "=", $this->approving_head) ->first(); if($data) return $data->name; return null; } public function getCompanyNameAttribute() { // $data = Company::select("name") $data = Company::select("code") ->where("id", "=", $this->company_id) ->first(); if($data) return $data->code; return null; } public function getDealershipNameAttribute() { $data = Dealership::select("name") ->where("id", "=", $this->dealership_id) ->first(); if($data) return $data->name; return null; } public function getDepartmentNameAttribute() { $data = Department::select("name") ->where("id", "=", $this->department_id) ->first(); if($data) return $data->name; return null; } public function getRequestedByNameAttribute() { $data = User::select("name") ->where("employee_id", "=", $this->requested_by) ->first(); if($data) return $data->name; return null; } public function file_attachment(){ return $this->hasMany( FileAttachment::class, 'reference_id','id' ); } //append next_approver public function getNextApprover($statusId){ $userTable = DB::connection('hr')->getDatabaseName() . ".users"; $roles = DB::connection('hr')->getDatabaseName() . ".roles"; $userRoles = DB::connection('hr')->getDatabaseName() . ".user_roles"; $data = []; if($statusId == 2){ $data = \App\Models\User::on('hr') // use HR connection ->where('employee_id', $this->approving_head) ->select('id', 'name', 'email', 'employee_id') ->get(); // or get() if expecting multiple } //ASSET VALIDATOR if($statusId == 25){ $data = DB::table('assetvalidator_itemassignments') ->join($userTable,'assetvalidator_itemassignments.user_id','=',"$userTable.id") ->whereNull('assetvalidator_itemassignments.deleted_at') ->where('assetvalidator_itemassignments.company_id', $this->company_id) ->where('assetvalidator_itemassignments.dealership_id', $this->dealership_id) ->where('assetvalidator_itemassignments.item_classification_id', $this->item_classification_id) ->select("$userTable.id","$userTable.employee_id","$userTable.name","$userTable.email") ->get(); } if($statusId == 23){ $data = StatusRoleGroupAccess:: join($roles,'status_role_group_access.role_group_id',"$roles.group_id") ->join($userRoles,"$roles.id",'=',"$userRoles.role_id") ->join($userTable,"$userRoles.user_id",'=',"$userTable.id") ->where('status_role_group_access.status_id',$statusId) ->where('status_role_group_access.permission','action') ->where('status_role_group_access.role_group_id',7) // ->where("$roles.id",) ->select("$userTable.id","$userTable.employee_id","$userTable.name","$userTable.email") ->get(); } //BUYER 8 if(in_array($statusId,[5,28])) { // if($this->status == 37 || $this->status == 38 || $this->status == 41){ $data = StatusRoleGroupAccess:: join($roles,'status_role_group_access.role_group_id',"$roles.group_id") ->join($userRoles,"$roles.id",'=',"$userRoles.role_id") ->join($userTable,"$userRoles.user_id",'=',"$userTable.id") ->join('item_assignments', fn($join) => $join->on("$userTable.id",'=',"item_assignments.user_id") ->where("item_assignments.item_classification_id",$this->item_classification_id) ) // ->whereIn('status_role_group_access.status_id',[37,38,41]) ->where('status_role_group_access.permission','action') ->where('status_role_group_access.role_group_id',8) ->select("$userTable.id","$userTable.employee_id","$userTable.name","$userTable.email") ->distinct() ->get(); } return $data; } }
| ver. 1.4 |
.
| PHP 8.1.32 | Generation time: 0.16 |
proxy
|
phpinfo
|
Settings